Skip to content

fix(examples): author the four alert-dialog fixtures in the dialect the renderer reads (objectui#7693) - #7962

Merged
baozhoutao merged 3 commits into
mainfrom
claude/issue-7693-alert-dialog-fixtures-read-dialect
Sep 6, 2026
Merged

fix(examples): author the four alert-dialog fixtures in the dialect the renderer reads (objectui#7693)#7962
baozhoutao merged 3 commits into
mainfrom
claude/issue-7693-alert-dialog-fixtures-read-dialect

Conversation

@claude

@claude claude Bot commented Sep 6, 2026

Copy link
Copy Markdown
Contributor

Fixes #7693

What was wrong

All four fixtures under examples/schema-catalog/src/schemas/components-overlay-alert-dialog/ authored their footer as an actions array of two button nodes. No surface carries that key:

  • packages/components/src/renderers/overlay/alert-dialog.tsx:37 draws AlertDialogCancel only when schema.cancelText is truthy; :38 draws AlertDialogAction only when schema.actionText is truthy. schema.actions has zero read sites.
  • AlertDialogSchema (packages/types/src/overlay.ts:89) and its zod twin (packages/types/src/zod/overlay.zod.ts:42) do not declare actions either.

So the four demos the docs page embeds through its SchemaExample host rendered a dialog with a header and an empty footer — including the one under the heading "With Custom Actions".

Nothing was red because BaseSchema is .passthrough() (packages/types/src/zod/base.zod.ts:241): actions rode through safeValidateSchema unvalidated, and no gate parses a JSON fixture as a schema.

The key set I measured on this base

origin/main at d39ede24e, after objectui#7104 (PR #7700, the declaration half) and objectui#7768 (trigger widened to a node array) had both landed.

Declared AND read — the dialect the fixtures now speak:
type, title, description, content, trigger, defaultOpen, open, cancelText, actionText, className. Plus the runtime slots onAction and onOpenChange, which are host-supplied functions with no JSON spelling — the zod twin refuses them by name.

Declared but read by nothing — deliberately not authored by any fixture:
cancelLabel, confirmLabel, confirmVariant. All three still exist on the declared face (overlay.ts:145-158, mirrored at overlay.zod.ts:60-62); the renderer reads none of them. Authoring a key that is only declared would trade one inert spelling for another.

The conversion, and the variant loss

Per fixture: actions[0] becomes cancelText, actions[1] becomes actionText. The per-button variant is dropped — the read dialect has no spelling for it, and the footer's styling is fixed by the primitives themselves (AlertDialogCancel always renders buttonVariants({ variant: 'outline' }), AlertDialogAction always the default). Three variants are lost: destructive on the confirm button of basic-alert-dialog and destructive-action, and ghost on the cancel button of confirmation-dialog. Trigger variants are untouched — those are ordinary button nodes the button renderer does read.

This follows the default route the triage comment adopted, quoted here in the original and not translated:

按读取方言转换,接受 variant 样式的丢失。 理由:一个渲染不出按钮的例子,严格劣于一个渲染得出按钮但少了 destructive 配色的例子。

Giving confirmVariant a read site is a renderer plus types change on the manual floor (domain:ui / domain:spec) and is explicitly out of this card's scope. It is not ridden along here, and no new card was opened for it — the triage comment already records the route and declines to open one.

fixture cancelText actionText variant dropped
basic-alert-dialog Cancel Continue confirm destructive
confirmation-dialog Don't Save Save cancel ghost
custom-actions Go Back Yes, Continue none
destructive-action Cancel Delete confirm destructive

custom-actions still demonstrates something of its own after the conversion — custom labels on both footer buttons rather than the palette's Cancel / Continue — so it is not a duplicate of basic-alert-dialog. It is kept regardless: the docs page references it by id, and deleting a referenced fixture is out of scope.

The pin

examples/schema-catalog/test/alert-dialog-footer-read-dialect-7693.test.tsx, both halves the triage comment listed, because they fail for different reasons:

  1. DOM half — every fixture is rendered through the real registry (the overlay-trigger-mirror-6939.test.tsx harness, forced open with defaultOpen, since a closed Radix dialog mounts no content at all) and must draw at least one footer button carrying text.
  2. Fixture-key half — a walk over the WHOLE catalog, not just these four, requiring that no alert-dialog node anywhere authors actions. This closes the class rather than the four files; today the catalog holds exactly these four alert-dialog nodes, so it needed no edit outside the anchor.

Each half carries a live control, because a render that draws nothing satisfies both assertions trivially:

  • RENDERS_IN_THE_READ_DIALECT — an inline node in the read dialect must draw two footer buttons. If the harness cannot see a footer button at all, this reds first and every fixture row below means nothing.
  • THE_PRE_REPAIR_SHAPE_DRAWS_NOTHING — the same node with an actions array and no label keys must draw zero footer buttons and still validate. That is the defect reproduced in one place, and it is what makes a red fixture row a reading about the spelling.
  • Plus two anti-vacuity probes for the catalog walk: that it really reaches the four alert-dialog nodes, and that its offender predicate reports one when handed one.

It would have gone red on this base

Run before the fixtures were touched, with the branch at origin/main content:

Tests  5 failed | 8 passed (13)
  x basic-alert-dialog draws at least one footer button   AssertionError: expected 0 to be greater than or equal to 1
  x destructive-action  draws at least one footer button
  x confirmation-dialog draws at least one footer button
  x custom-actions      draws at least one footer button
  x the whole catalog is clean, not just the four the docs page embeds
      Expected []  Received [ 4 ids ]

Both controls were green in that same run, so the five reds are readings about the fixtures, not about the harness.

Ablation on the committed tree

destructive-action.json was restored to the actions shape at commit e25327f00, the mutation proven on disk before the run (actions count 1, cancelText count 0, actionText count 0; blob c461f143 differs from HEAD blob cfd178b2), then restored:

Tests  2 failed | 11 passed (13)
  x destructive-action draws at least one footer button
  x the whole catalog is clean, not just the four the docs page embeds
BACK_BLOB=cfd178b2064bbb5f5f25569eccf6143248c2ddb9   (== HEAD blob)
git diff HEAD after restore: []

Exactly the mutated fixture's row and the catalog-wide row went red; the other three fixture rows and both controls stayed green. The restore is proven by blob equality plus an empty git diff HEAD, not by an exit code.

The census that moved with it

examples/schema-catalog/test/form-control-dom-leak-5632.test.tsx asserts a per-type node census over the catalog, and button moves 126 to 118: the eight action-array button nodes are now two strings per fixture, so they leave a type-keyed walk. That table's own header sanctions exactly this ("These move when the CATALOG is authored, not when a renderer changes ... update them"); this diff touches no renderer, and noElement stays 0 everywhere.

Not touched

  • content/docs/components/overlay/alert-dialog.mdxverified, not assumed. Its Schema block was already corrected by PR fix(types): declare the four alert-dialog keys the renderer reads (objectui#7104) #7700 and lists cancelText / actionText with no actions row, and its prose at :46 describes the footer correctly ("the cancel button renders only when cancelText is set and the confirm button only when actionText is set"). No sentence there is wrong, so the page is left alone.
  • No renderer, no packages/types.
  • No changeset: node scripts/check-changeset-presence.mjs reports "6 file(s) changed, 0 of them published source of a package the release covers ... no changeset is owed" (examples/** is a private workspace).

Verification

All of the below on e25327f00 (working tree byte-identical to it, git diff HEAD empty).

run verdict
pnpm exec vitest run --maxWorkers=2 examples/schema-catalog/ Test Files 29 passed (29) / Tests 2088 passed (2088)
pnpm --filter @object-ui/example-schema-catalog type-check (tsc --noEmit && tsc -p tsconfig.test.json) exit 0; the new test file confirmed in the program via --listFiles
pnpm --filter @object-ui/example-schema-catalog regenerate:check src/index.ts is up to date (431 entries)
pnpm --filter @object-ui/example-schema-catalog lint exit 0; --format json counts 31 files, 0 errors, 0 warnings, the new file among them
pnpm check:doc-snippets (after its scoped build) 477 of 477 block(s) judged, 0 failed
pnpm check:doc-types Every documented component type is registered.
pnpm check:control-bytes OK (scanned 6412 tracked text file(s))
pnpm check:doc-example-readers OK 80 documented symbol(s) ... no @example hand-spells one
node scripts/check-type-check-coverage.mjs 42/42 packages compile their tests
pnpm check:unreferenced-sources Every shipped source file in every covered package is reachable.
node scripts/check-governed-queue-guard.mjs --test (all 6 paths) NOT GOVERNED — 6 path(s) checked ... none matched

turbo ls --affected from the branch base names two packages: @object-ui/example-schema-catalog (fully run above) and @object-ui/site, which is affected only because it depends on the catalog. The catalog's registry is typed as a Record keyed by STRING with Example values — written out in words rather than in angle brackets, because GitHub's body sanitizer eats short angle-bracket fragments even inside backticks — and Example leaves schema at unknown (examples/schema-catalog/src/index.ts:457, src/types.ts), so a JSON content change crosses that boundary with no type surface at all, and no example id was added or removed. The site's own type-check and next build are left to CI.

Heavy runs went through the shared verify lock; the wall-clock figures in its verdict lines are shared-box seconds.

Rework — the premise pin this card had to flip (added after the first CI run)

One sentence, since it is the substance of the rework: packages/types/src/__tests__/alert-dialog-read-dialect-7104.test.ts pinned this card's FILED PREMISE — that all four fixtures author actions and neither label key — precisely so the fix would have to come back and re-derive it, and the first push of this PR flipped the fixtures while leaving that pin, which is what turned CI's Test shard 4/4 red on four cases at :324.

That pin is now re-derived rather than deleted, because the file's own header prescribes re-derivation in those words: "Pinned here as that card's filed premise; its fix goes red here and re-derives the pin." The block now reads:

  • each fixture authors cancelText and actionText as strings and no actions array;
  • the UNION of every key the four fixtures author is a subset of AlertDialogZod.shape — membership in the mirror, which is the question .success cannot answer under .passthrough(), and which is not askable from the catalog package at all;
  • two live controls: that actions is genuinely absent from shape (so the membership leg is not a tautology), and that the pre-repair document STILL parses green (so the reason nothing red covered this card stays a live reading, not a historical note).

The render-side half stays with the catalog and is deliberately not duplicated: neither package can host both, since packages/types cannot see a renderer and examples/schema-catalog cannot see the mirror's shape. The header bullet that listed this premise as UNRESOLVED is rewritten to record that it resolved and how. No face changepackages/types/src/overlay.ts and packages/types/src/zod/overlay.zod.ts are untouched, and git diff against the branch base names exactly eight files, none of them a declaration.

The standing line I had skipped

git grep -l 'components-overlay-alert-dialog' packages/ scripts/ examples/ apps/ — every reader of these fixtures:

reader in scope of the first push?
examples/schema-catalog/src/index.ts generated registry; regenerate:check green, no id added or removed
examples/schema-catalog/test/alert-dialog-footer-read-dialect-7693.test.tsx the new pin
examples/schema-catalog/test/form-control-dom-leak-5632.test.tsx the NODE_CENSUS row
packages/types/src/__tests__/alert-dialog-read-dialect-7104.test.ts MISSED — the premise pin, fixed here

Outside those four paths, content/docs/components/overlay/alert-dialog.mdx is the only other reference in the repo, and it is verified correct and untouched.

Ablation of the re-derived pin

confirmation-dialog.json restored to the actions shape on the committed tree, mutation proven on disk first (actions count 1, cancelText 0, actionText 0; blob ad076ac6 differs from HEAD blob ff9eb780):

Tests  2 failed | 40 passed (42)
  x confirmation-dialog.json authors `cancelText` and `actionText` and no `actions` array
  x every key any fixture authors is a MEMBER of the mirror — the reading passthrough used to hide
BACK_BLOB=ff9eb7800e19f8750b6913111010304637d71a5b   (== HEAD blob)
git diff HEAD after restore: []

Exactly the mutated fixture's row and the membership leg; both controls and the other three fixture rows stayed green.

Changeset, now owed

Editing any file under a released package's src/ owes a changeset, and the re-derived pin lives at packages/types/src/__tests__/. Nothing is published by it, so .changeset/alert-dialog-fixture-premise-pin-7693.md carries the EMPTY frontmatter the gate names as its explicit exemption: 1 changeset(s) ... Every one of them has an EMPTY frontmatter — declared as releasing nothing, which is the explicit exemption and a complete answer to this gate. check-changeset-no-major is green.

Re-run, at c070119cd

run verdict
pnpm exec vitest run --maxWorkers=2 packages/types/src/__tests__/alert-dialog-read-dialect-7104.test.ts Test Files 1 passed (1) / Tests 42 passed (42)
pnpm exec vitest run --maxWorkers=2 packages/types/ examples/schema-catalog/ Test Files 158 passed (158) / Tests 4479 passed (4479)
pnpm --filter @object-ui/types type-check (tsc --noEmit && tsc -p tsconfig.examples.json && tsc -p tsconfig.test.json) exit 0; the edited pin confirmed in the program via --listFiles
eslint on the edited file, --format json 1 file, 0 errors, 0 warnings
pnpm check:control-bytes OK (scanned 6414 tracked text file(s))
node scripts/check-governed-queue-guard.mjs --test (all 8 changed paths) NOT GOVERNED — 8 path(s) checked ... none matched
node scripts/check-changeset-presence.mjs exit 0, empty-frontmatter declaration accepted

turbo ls --affected now names most of the tree, because turbo works at package granularity and the edited file sits under packages/types/src/. That fan-out is not real: the file is a leaf test, imported by nothing (git grep for its name outside itself finds one prose mention in a sibling test's comment and no import), so no downstream package's behaviour can move. The types package's own suite and the catalog's were both run in full above; the rest is left to CI.

Session reference, in prose and as a code span so it survives a body edit: https://claude.ai/code/session_013uAaxiwgYDybsTNV9xwa1M


Generated by Claude Code

…he renderer reads (objectui#7693)

All four `components-overlay-alert-dialog/*` fixtures authored an `actions`
array of two button nodes. Nothing carries that key: the renderer
(`packages/components/src/renderers/overlay/alert-dialog.tsx:37-38`) draws
`AlertDialogCancel` ONLY from `schema.cancelText` and `AlertDialogAction` ONLY
from `schema.actionText`, and `schema.actions` has zero read sites in the repo.
`AlertDialogSchema` and its zod twin do not declare it either. So the four
demos the docs page embeds rendered a dialog with an EMPTY footer — the one
thing an alert dialog exists for was missing from every one of its examples.

Nothing was red because `BaseSchema` is `.passthrough()`
(`packages/types/src/zod/base.zod.ts:241`): `actions` rode through
`safeValidateSchema` unvalidated, and no gate parses a JSON fixture as a schema.

Measured on this base, the keys `AlertDialogSchema` declares AND the renderer
reads: `type`, `title`, `description`, `content`, `trigger`, `defaultOpen`,
`open`, `cancelText`, `actionText`, `className` (plus the runtime slots
`onAction` / `onOpenChange`, which have no JSON spelling and are refused by
name). `cancelLabel`, `confirmLabel` and `confirmVariant` are still DECLARED but
read by nothing, so no fixture is moved onto them.

Conversion, per fixture: `actions[0]` -> `cancelText`, `actions[1]` ->
`actionText`. The per-button `variant` is DROPPED — the read dialect has no
spelling for it, and the footer's styling is fixed by the primitives
(`AlertDialogCancel` is always `buttonVariants({ variant: 'outline' })`,
`AlertDialogAction` always the default). Giving `confirmVariant` a read site is
a renderer + types change on the manual floor and is deliberately not ridden
along here.

The pin, `test/alert-dialog-footer-read-dialect-7693.test.tsx`, has two halves,
each with a live control: a DOM half that renders every fixture through the real
registry and requires at least one footer button, and a fixture-key half that
walks the WHOLE catalog and requires no `alert-dialog` node anywhere to carry
`actions`. Both went red on this base (4 + 1 failures) while both controls
stayed green, so the red is a reading about the spelling and not about the
harness.

`form-control-dom-leak-5632.test.tsx`'s `NODE_CENSUS` moves `button` 126 -> 118:
the eight action-array button nodes are now two strings, so they leave a
`type`-keyed walk. That table's own header sanctions the update for a
catalog-authored diff that touches no renderer, which this one is.

Claude-Session: https://claude.ai/code/session_013uAaxiwgYDybsTNV9xwa1M

Co-authored-by: Claude <noreply@anthropic.com>
…read dialect (objectui#7693)

`alert-dialog-read-dialect-7104.test.ts` pinned the FILED PREMISE of
objectui#7693 — that all four schema-catalog fixtures author `actions` and
neither label key — precisely so the card's fix would have to come back here and
re-derive it. Converting the fixtures did exactly that: the four membership legs
went red on CI shard 4/4. This is the other side of that flip.

The file's own header prescribes re-derivation, not deletion, so the block is
inverted rather than dropped, and the header bullet that listed this premise as
UNRESOLVED is rewritten to record that it resolved and how.

What the re-derived block asserts is the TYPES-side reading, not a second copy
of the catalog-side one:

  - each fixture authors `cancelText` and `actionText` as strings and no
    `actions` array;
  - the UNION of every key the four fixtures author is a subset of
    `AlertDialogZod.shape` — membership in the mirror, which is the question
    `.success` cannot answer because `BaseSchema` is `.passthrough()`, and
    which is not askable from the catalog package at all;
  - two live controls: that `actions` is genuinely absent from `shape` (so the
    membership leg is not a tautology), and that the pre-repair document STILL
    parses green (so the reason nothing red covered this card stays a live
    reading rather than a historical note).

The render-side half — footer buttons actually drawn, and a catalog-wide walk
for `actions` on any alert-dialog node — stays with the catalog in
`examples/schema-catalog/test/alert-dialog-footer-read-dialect-7693.test.tsx`.
Neither package can host both: this one cannot see a renderer, that one cannot
see the mirror's shape.

No face change: `packages/types/src/overlay.ts` and
`packages/types/src/zod/overlay.zod.ts` are untouched.

Claude-Session: https://claude.ai/code/session_013uAaxiwgYDybsTNV9xwa1M

Co-authored-by: Claude <noreply@anthropic.com>
…g (objectui#7693)

Editing any file under a released package's `src/` owes a changeset, and the
re-derived premise pin lives at `packages/types/src/__tests__/`. The change
publishes nothing: the declaration and its zod twin are untouched and the only
edited file is a test, so this is the empty-frontmatter form the gate names as
its explicit exemption rather than a version bump.

Claude-Session: https://claude.ai/code/session_013uAaxiwgYDybsTNV9xwa1M

Co-authored-by: Claude <noreply@anthropic.com>
@github-actions

github-actions Bot commented Sep 6, 2026

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

Metric Value Budget
Eager closure (gzip, 50 chunks) 3189.5 KB 3191.4 KB
Main entry chunk (gzip) 143.5 KB 350 KB
Entry file index-BiLRQSYR.js
Status PASS

The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it.


📦 Bundle Size Report

Package Size Gzipped
app-shell (consoleActionDispatch.js) 0.20KB 0.19KB
app-shell (index.js) 15.67KB 5.75KB
app-shell (runtime-config.js) 20.68KB 7.36KB
app-shell (types.js) 0.01KB 0.04KB
app-shell (urlParams.js) 10.06KB 3.86KB
auth (ActiveOrganizationStorage.js) 25.05KB 9.16KB
auth (AuthContext.js) 0.31KB 0.24KB
auth (AuthGuard.js) 2.07KB 1.00KB
auth (AuthProvider.js) 40.18KB 10.59KB
auth (AuthShell.js) 3.49KB 1.40KB
auth (ForgotPasswordForm.js) 12.21KB 3.45KB
auth (LoginForm.js) 18.15KB 5.39KB
auth (PreviewBanner.js) 0.90KB 0.50KB
auth (RegisterForm.js) 6.65KB 2.22KB
auth (SocialSignInButtons.js) 9.61KB 3.89KB
auth (UserMenu.js) 3.41KB 1.23KB
auth (auth-gate-events.js) 1.29KB 0.66KB
auth (authStyles.js) 5.04KB 1.72KB
auth (createAuthClient.js) 40.21KB 10.80KB
auth (createAuthenticatedFetch.js) 8.46KB 3.43KB
auth (index.js) 3.19KB 1.44KB
auth (invitation-status.js) 1.22KB 0.70KB
auth (org-roles.js) 6.66KB 2.78KB
auth (phone-identifier.js) 1.11KB 0.66KB
auth (types.js) 0.59KB 0.35KB
auth (useAuth.js) 5.30KB 1.02KB
auth (useWorkspaceAdminStatus.js) 5.13KB 2.35KB
collaboration (CommentThread.js) 26.08KB 7.56KB
collaboration (LiveCursors.js) 3.17KB 1.27KB
collaboration (PresenceAvatars.js) 6.49KB 2.64KB
collaboration (PresenceProvider.js) 2.79KB 1.13KB
collaboration (index.js) 1.68KB 0.73KB
collaboration (useCollaborationTranslation.js) 6.05KB 2.52KB
collaboration (useCommentSearch.js) 1.98KB 0.88KB
collaboration (useConflictResolution.js) 7.75KB 1.86KB
collaboration (useMentionNotifications.js) 1.81KB 0.68KB
collaboration (usePresence.js) 6.33KB 1.84KB
collaboration (useRealtimeSubscription.js) 7.91KB 2.01KB
components (index.js) 510.60KB 116.20KB
core (index.js) 6.96KB 2.79KB
create-plugin (index.js) 10.08KB 3.26KB
data-objectstack (index.js) 182.08KB 50.62KB
fields (index.js) 242.44KB 61.25KB
i18n (LocalizationContext.js) 1.76KB 0.96KB
i18n (builtinAggregateLabels.js) 0.86KB 0.49KB
i18n (currency.js) 1.22KB 0.64KB
i18n (fallbackInterpolation.js) 6.25KB 2.77KB
i18n (i18n.js) 4.28KB 1.75KB
i18n (index.js) 3.65KB 1.47KB
i18n (pickLocalized.js) 7.62KB 3.26KB
i18n (provider.js) 26.89KB 9.04KB
i18n (useDisplayLocale.js) 2.85KB 1.45KB
i18n (useObjectLabel.js) 34.34KB 9.17KB
i18n (useSafeTranslation.js) 5.60KB 2.33KB
layout (index.js) 38.98KB 10.98KB
mobile (MobileProvider.js) 0.92KB 0.49KB
mobile (ResponsiveContainer.js) 0.94KB 0.38KB
mobile (breakpoints.js) 1.51KB 0.70KB
mobile (createOfflineDataSource.js) 5.61KB 1.75KB
mobile (index.js) 1.99KB 0.87KB
mobile (offlineQueue.js) 3.91KB 1.35KB
mobile (pwa.js) 0.97KB 0.49KB
mobile (serviceWorker.js) 1.48KB 0.62KB
mobile (serviceWorkerSource.js) 3.41KB 1.48KB
mobile (useBreakpoint.js) 1.54KB 0.65KB
mobile (useGesture.js) 6.96KB 1.98KB
mobile (useOfflineSync.js) 1.99KB 0.72KB
mobile (usePullToRefresh.js) 2.53KB 0.85KB
mobile (useResponsive.js) 0.72KB 0.42KB
mobile (useSpecGesture.js) 4.39KB 1.66KB
mobile (useTouchTarget.js) 1.01KB 0.54KB
permissions (MePermissionsProvider.js) 11.71KB 4.29KB
permissions (PermissionContext.js) 0.31KB 0.25KB
permissions (PermissionGuard.js) 0.89KB 0.45KB
permissions (PermissionProvider.js) 6.24KB 2.16KB
permissions (discardProofCache.js) 1.04KB 0.55KB
permissions (evaluator.js) 5.12KB 1.74KB
permissions (index.js) 0.93KB 0.41KB
permissions (store.js) 0.91KB 0.42KB
permissions (useFieldPermissions.js) 1.28KB 0.53KB
permissions (usePermissions.js) 4.83KB 2.27KB
plugin-ai (index.js) 15.75KB 3.80KB
plugin-calendar (index.js) 47.87KB 13.31KB
plugin-charts (index.js) 70.92KB 19.75KB
plugin-chatbot (index.js) 196.19KB 46.37KB
plugin-dashboard (index.js) 132.88KB 34.69KB
plugin-designer (index.js) 212.86KB 43.19KB
plugin-detail (index.js) 250.55KB 64.06KB
plugin-editor (index.js) 2.46KB 1.10KB
plugin-form (index.js) 132.87KB 32.66KB
plugin-gantt (index.js) 167.26KB 41.00KB
plugin-grid (index.js) 209.29KB 56.78KB
plugin-kanban (index.js) 52.71KB 14.55KB
plugin-list (index.js) 113.56KB 27.70KB
plugin-map (index.js) 20.44KB 6.78KB
plugin-markdown (index.js) 13.93KB 4.81KB
plugin-report (index.js) 43.59KB 11.97KB
plugin-timeline (index.js) 30.40KB 8.76KB
plugin-tree (index.js) 9.20KB 3.19KB
plugin-view (index.js) 85.24KB 20.94KB
providers (DataSourceProvider.js) 0.75KB 0.39KB
providers (MetadataProvider.js) 1.37KB 0.59KB
providers (ThemeProvider.js) 1.90KB 0.85KB
providers (UploadProvider.js) 11.66KB 3.50KB
providers (index.js) 0.45KB 0.23KB
providers (types.js) 0.01KB 0.04KB
react-runtime (index.js) 5.62KB 2.34KB
react (LazyPluginLoader.js) 4.47KB 1.63KB
react (SchemaRenderer.js) 81.07KB 26.86KB
react (data-invalidation.js) 5.05KB 2.08KB
react (index.js) 4.63KB 2.18KB
react (schema-input.js) 2.32KB 1.24KB
react (spec-input.js) 0.20KB 0.18KB
sdui-parser (codegen.js) 5.41KB 2.34KB
sdui-parser (dashboard-widget-options.js) 3.08KB 1.30KB
sdui-parser (index.js) 4.93KB 2.24KB
sdui-parser (input-type.js) 2.84KB 1.40KB
sdui-parser (parse.js) 20.57KB 5.88KB
sdui-parser (provenance.js) 3.66KB 1.82KB
sdui-parser (types.js) 0.28KB 0.23KB
sdui-parser (validate.js) 10.35KB 3.60KB
types (ai.js) 0.20KB 0.17KB
types (api-types.js) 0.20KB 0.18KB
types (app.js) 2.87KB 1.00KB
types (base.js) 0.20KB 0.18KB
types (blocks.js) 0.20KB 0.18KB
types (complex.js) 2.74KB 1.41KB
types (crud.js) 0.20KB 0.18KB
types (dashboard-filter-alias.js) 6.23KB 2.74KB
types (data-display.js) 3.75KB 1.85KB
types (data-protocol.js) 0.20KB 0.19KB
types (data.js) 0.20KB 0.18KB
types (designer.js) 1.85KB 0.85KB
types (disclosure.js) 0.20KB 0.18KB
types (error-code.js) 1.54KB 0.88KB
types (expression.js) 0.20KB 0.18KB
types (feedback.js) 0.20KB 0.18KB
types (field-types.js) 0.20KB 0.18KB
types (form.js) 0.20KB 0.18KB
types (http-inflight.js) 8.87KB 3.73KB
types (http-retry.js) 4.32KB 2.02KB
types (icon-key-migration.js) 4.26KB 1.63KB
types (index.js) 4.74KB 2.25KB
types (layout.js) 0.20KB 0.18KB
types (managed-by.js) 0.19KB 0.18KB
types (mobile.js) 4.73KB 2.28KB
types (navigation.js) 0.20KB 0.18KB
types (objectql.js) 0.20KB 0.18KB
types (overlay.js) 0.20KB 0.18KB
types (permissions.js) 0.20KB 0.18KB
types (plugin-scope.js) 0.20KB 0.18KB
types (record-components.js) 0.20KB 0.19KB
types (record-semantics.js) 1.28KB 0.67KB
types (registry.js) 0.20KB 0.18KB
types (reports.js) 0.20KB 0.18KB
types (select-option.js) 0.20KB 0.19KB
types (spec-report.js) 5.05KB 1.93KB
types (spec-ui-namespace.js) 0.20KB 0.19KB
types (system-fields.js) 3.33KB 1.54KB
types (theme.js) 6.28KB 2.87KB
types (ui-action.js) 8.11KB 3.32KB
types (views.js) 0.20KB 0.18KB
types (widget.js) 0.20KB 0.18KB

Size Limits

  • ✅ Core packages should be < 50KB gzipped
  • ✅ Component packages should be < 100KB gzipped
  • ⚠️ Plugin packages should be < 150KB gzipped

@baozhoutao
baozhoutao added this pull request to the merge queue Sep 6, 2026
Merged via the queue into main with commit ed5fee9 Sep 6, 2026
33 checks passed
@baozhoutao
baozhoutao deleted the claude/issue-7693-alert-dialog-fixtures-read-dialect branch September 6, 2026 05:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

2 participants